#ifndef _STACK_H_
#define _STACK_H_

#include <assert.h>
#include <string.h>
#include <stdlib.h>

struct Stack
{
	void	*base;
	int		stack_size;
	int		min_stack;
	int		max_stack;
	int		top;

	void	(*_cpData)(void*, const void*);
	void	(*_printInfo)(void*);
	int 	(*_dataSize)();
	void*	(*_getPointer)(void*, int);
};

extern struct Stack* createStack(int, 
								void (*)(void*, const void*),
								void (*)(void*),
								int (*)(),
								void* (*)(void*, int));
extern void	clearStack	(struct Stack *);
extern void	deleteStack	(struct Stack *);
extern int	popElement	(struct Stack *, void *);
extern int	pushElement	(struct Stack *, const void *);
extern void	printInfo	(struct Stack *);

#endif
